// 扩展ObjectConstructor类型声明
interface ObjectConstructor {
    entries(o: object): [string, any][];
}

/**
 * 随机函数工具
 */
export default class RandomUtil {
    
    /**
     * 返回一个区间的整形随机数（不包含最大值）
     * @param min 最小值
     * @param max 最大值（不包含）
     * @returns 整形随机数
     */
    public static getRangeInt(min: number, max: number): number {
        if (max < min) {
            throw new Error('max < min')
        }
        min = Math.floor(min)
        max = Math.floor(max)

        return min + Math.floor(Math.random() * (max - min))
    }


    private count = 0
    constructor(counterStartNumber: number) {
      this.count = counterStartNumber
    }
    // 生成自增整数
    AutoIncreaseInteger() {
      return this.count++
    }
    // 生成随机整数 具有范围约束[min, max)
    // min 最小值
    // max 最大值
    RangeInteger(min: number, max: number): number {
        if (max < min) {
            throw new Error('max < min')
        }
        return  Math.floor(Math.random() * (Math.floor(max) - Math.floor(min))) + min
    }
    
    // 生成指定长度的随机 含[a~z]的字符串,
    // length 指定字符串长度
    // toUpper 首字母是否大写
    RandomString(length: number, firstToUpper?: boolean) {
        let str = ""
        for (let i = 0; i < length; i++) {
            if (firstToUpper && i == 1) {
            str += String.fromCharCode(this.RangeInteger(97, 123)).toUpperCase() // 首字母大写
            continue
            }
            str += String.fromCharCode(this.RangeInteger(97, 123))
        }
        return str
    }

    public static makeString(length: number): string {
        let outString: string = '';
        let inOptions: string = 'ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz123456789';//除o,0,l,1
    
        for (let i = 0; i < length; i++) {
    
          outString += inOptions.charAt(Math.floor(Math.random() * inOptions.length));
    
        }
    
        return outString;
      }
    
}

